#include <iostream>

using namespace std;
//实现通用对数组进行排序的函数
//规则：
//利用函数模板封装一个排序的函数，可以对不同数据类型数组进行排序
//排序规则从大到小，排序算法为选择排序
//分别利用char数组和int数组进行测试

template<typename T>
void mySwap(T &a, T &b) {
    T temp = a;
    a = b;
    b = temp;
}

template<typename T>
void mySort(T arr[], int len) {
    for (int i = 0; i < len; ++i) {
        int max = i;//认定最大值的下标
        for (int j = i + 1; j < len; ++j) {
            if (arr[max] < arr[j]) {
                max = j;//更新最大值的下标
            }
        }
        if (max != i) {//如果最大数的下标不是i，交换两者
            mySwap(arr[max], arr[i]);
        }
    }
}

template<typename T>
void printArr(T arr[],int len){
    for (int i = 0; i < len; ++i) {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}
void test1() {
    char ch[] = "zxcvbnm";
    int num=sizeof(ch)/ sizeof(char);
    printArr(ch,num-1);
    mySort(ch,num-1);
    printArr(ch,num-1);
}
void test2(){
    int n[]={6,3,9,2,8,5,1,7,4};
    int num=sizeof(n)/ sizeof(int);
    printArr(n,num-1);
    mySort(n,num-1);
    printArr(n,num-1);
}
int main() {
    test1();
    test2();
    return 0;
}